package com.company.v05;

import java.io.PrintStream;
import java.util.Comparator;
import java.util.function.BiPredicate;
import java.util.function.Consumer;

/*
  方法引用
  三种使用情况
  1：对象::实例方法名
  2： 类::静态方法名
  3： 类:: 实例方法名 x方法的调用者，y方法的实际参数
*/
public class Demo {
  public static void main(String[] args) {
    //

    Consumer<String> con = x -> System.out.println("小明又去" + x + "洗澡了");
    con.accept("长沙");
    /*
     对象::实例方法名
    */
    PrintStream ps = System.out;
    Consumer<String> con2 = ps::println;
    con2.accept("小明又又去洗澡了");

    Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
    System.out.println(com.compare(18, 20));
    /*
      类::静态方法名
    */
    Comparator<Integer> com2 = Integer::compare;
    System.out.println(com2.compare(18, 20));

    /*
       3： 类:: 实例方法名 x方法的调用者，y方法的实际参数
     */
    BiPredicate<String, String> bp = (x, y) -> x.equals(y);
    System.out.println(bp.test("abc", "def"));

    BiPredicate<String,String>bp2 = String::equals;
    System.out.println(bp2.test("abc","abc"));
  }
}

/*
 Consumer<T> 用法 void accept（T t）
 方法体中的方法 void println（String x）
 如果满足前面的函数式接口的方法的参数和返回值和具体方法一致就可以使用方法引用

*/
